package evi.com.evi.view;

import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;
import evi.com.evi.utils.SPUtils;

/**
 * @author neil
 * @time 2016年11月20日下午2:58:33
 * 
 * @TODO 2.0timebutton：1绑定不同解密那独立计时；2简化调用及状态管理；3解决已知的一些bug
 */
public class TimeButton extends Button {

	private String des = ""; // 标题描述:标题
	private long COUNTDOWN = 0; // 倒计时上线:毫秒

	private Handler handler; // 倒计时控制器
	private long time = 0; // 当前计时

	public TimeButton(Context context) {
		this(context, null);
	}

	public TimeButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		handler = new Handler();
	}

	/**
	 * TODO 初始化des
	 */
	public TimeButton setTextDes(String des) {
		this.des = des;
		setText(des);
		return this;
	}

	/**
	 * TODO 初始化倒计时
	 */
	public TimeButton setTextTime(long countdown) {
		this.COUNTDOWN = countdown;
		return this;
	}

	/**
	 * TODO 状态:初始化状态
	 */
	public void initStatue() {
		time = 0; // 重置计时条件
		setText(des);
	}

	/**
	 * TODO 状态:继续计时状态(接着上次计时继续)
	 */
	public void continueStatue() {
		// 初始化时间
		String finish_time = SPUtils.get(getContext(), getContext().getClass().getSimpleName() + "finish_time");
		String during_time = SPUtils.get(getContext(), getContext().getClass().getSimpleName() + "during_time");

		if (!TextUtils.isEmpty(finish_time) && !TextUtils.isEmpty(during_time)) {// 可能有初始状态
			long time = Long.parseLong(finish_time)- (System.currentTimeMillis() - Long.parseLong(during_time));
			if (time > 0)count(time);
		}
	}

	/**
	 * 状态保存:保存上次的状态
	 */
	@Override
	protected void onDetachedFromWindow() {
		super.onDetachedFromWindow();
		SPUtils.put(getContext(), getContext().getClass().getSimpleName()+ "finish_time", time + "");
		SPUtils.put(getContext(), getContext().getClass().getSimpleName()+ "during_time", System.currentTimeMillis() + "");
	}

	// 私有方法区
	/**
	 * 点击事件发生:增加计时
	 */
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_UP)
			if (isEnabled() && hasOnClickListeners()) {
				count(COUNTDOWN); // 开启计时
				return performClick();
			}
		return super.onTouchEvent(event);
	}

	/**
	 * TODO 核心计时状态控制
	 */
	private void count(long time_) {
		this.time = time_;
		setEnabled(false);
		// 倒计时
		handler.postDelayed(new Runnable() {
			@Override
			public void run() {
				time -= 1000; // 改变数据
				setText(time / 1000 + ""); // 绑定视图

				if (time <= 0) { // 状态判断
					setEnabled(true);
					setText(des);
				} else {
					handler.postDelayed(this, 1000);// 判断条件
				}
			}
		}, 1000);
	}
}
